/*
 * @Author: baoshijie baoshijie
 * @Date: 2023-06-14 09:47:05
 * @LastEditors: bsj
 * @LastEditTime: 2023-11-06 10:12:55
 * @FilePath: \notam-web\mockServer.js
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */

/**********************
*  Author: zzh  
*  Date: 20220222
*  Des: '基于node + express + cors + mock，本地模拟数据服务，支持Network中查看数据请求，自动化引入本地JSON数据，无须手动引入，自动遍历添加接口拦截'

*  @param: dirName          //指定目录
*  @param: port            //设置端口
*  @param: fileArray      //文件名数组
*  @param: JSONS          //数据集合对象
*  @param: sourceFile     //源文件
*  @param: tempFile       //临时文件
*
*********************/

//主模块
const fs = require('fs')
const path = require('path')
const express = require("express")
const cors = require('cors')
const Mock = require("mockjs") 
const app = express() 

//变量配置
const dirName = './public/mock'              //本地数据json文件目录
const port = '3001'                  //模拟服务端口
let JSONS = Object                   //解析本地数据json数据集合对象

const sourceFile = './public/project.config.js'  //API地址配置文件
const tempFile = './public/temp.js'     //输出新的临时API地址配置文件


//同步读写/拷贝API地址配置文件
const copyWriteFile = (source, target) => {
	//读取源文件
	let result = fs.readFileSync(source, 'utf8');
	result= result.replace(/API_PATH? \+/g, '');
	// console.log(22,result)
	result +=  `module.exports = $API`; 
	
	//拷贝写入新的临时文件
	fs.writeFileSync(target, result)
}
copyWriteFile(sourceFile, tempFile)


//引入新的临时API地址配置文件
const $API = require(tempFile)
// console.log(`============================================================`)
// console.log('接口地址：')
// console.log($API)


//遍历指定目录下的json文件名
const fileType = /(.json|.czml)$/;
const fileArray = fs.readdirSync(dirName).filter(file => fileType.test(path.extname(file)))
console.log("🚀 ~ file: mockServer.js:65 ~ fileArray:", fileArray)

//读取json文件
fileArray.forEach(name => {
	const fileData = fs.readFileSync(path.join(dirName, name));
	const data = JSON.parse(fileData.toString());
	name = name.replace(fileType, '');
	JSONS[name] = data
});

//处理跨域请求中间件
app.use(cors())

//自动遍历添加接口拦截并模拟数据
for(const key in $API) {
	app.use($API[key], function (req, res) {
	  //res.send(JSONS[key])
	  res.json(Mock.mock(JSONS[key]))
	})
}


//监听端口
app.listen(port, () => {
//   console.log(`============================================================`)
//   console.log(`Express服务已启动`)
//   console.log(`http://localhost:${port}`)
})

//服务启动后删除临时API地址配置文件
fs.unlink(tempFile, function(){
	console.log('***已清除临时API地址配置文件***')
})


